package org.example.react.magazinist;
/**
 * 本文中给出的示例代码是以杂志出版商为模型。假设出版商有两个订阅客户。
 *
 * 出版商将为每个订阅客户出版20本杂志。出版商知道他们的客户有时在邮递杂志时会不在家，
 * 而当他们的邮箱（subscriber buffer）不巧被塞满时邮递员会退回或丢弃杂志，出版商不希望出现这种情况。
 *
 * 于是出版商发明了一个邮递系统：当客户在家时再给出版商致电，出版商会立即邮递一份杂志。
 * 出版商打算在办公室为每个客户保留一个小号的邮箱以防当杂志出版时客户没有第一时间致电获取。
 * 出版商认为为每个客户预留一个可以容纳8份杂志的邮件已经足够（publisher buffer）。
 *
 * 于是一名员工提出了以下不同的场景：
 *
 * 如果客户请求杂志足够迅速，将不会存在邮箱容量的问题。
 * 如果客户没有以杂志出版的速度发出请求，那么邮箱将被塞满。这位员工提出以下几种处理方案：
 * a. 增加邮箱容量，为每位客户提供可容纳20份杂志的邮箱。（publisher增加buffer）
 * b. 直到客户请求下一份杂志之前停止印刷，并且根据客户请求的速度降低印刷速度以清空邮箱。
 * c. 新的杂志直接丢掉。
 * d. 一个折中的方案： 如果邮箱满了，在下次打印之前等待一段时间，如果还是没有足够的空间则丢弃新的杂志。
 *      出版商无法承受花费过多的资源仅仅是因为一个速度慢的客户，那将是巨大的浪费，最终选择了方案d，最大程度上减少客户损失。
 *
 * 本文示例代码中选用了方案d是因为如果我们使用了一个虚拟的无穷buffer，这对理解Reactive模式的中概念是不利的，
 * 代码也将变得过于简易，无法与其他方案进行比较，接下来让我们来看代码吧。
 *
 * 作者：资良_Leo
 * 链接：https://www.jianshu.com/p/ce207be13078
 * 来源：简书
 * 著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。
 */